{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predicting Star Temperature with Elastic Net Linear Regression\n",
    "Using the Open Exoplanet Catalogue database: https://github.com/OpenExoplanetCatalogue/open_exoplanet_catalogue/\n",
    "\n",
    "## Data License\n",
    "Copyright (C) 2012 Hanno Rein\n",
    "\n",
    "Permission is hereby granted, free of charge, to any person obtaining a copy of this database and associated scripts (the \"Database\"), to deal in the Database without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Database, and to permit persons to whom the Database is furnished to do so, subject to the following conditions:\n",
    "\n",
    "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Database. A reference to the Database shall be included in all scientific publications that make use of the Database.\n",
    "\n",
    "THE DATABASE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATABASE OR THE USE OR OTHER DEALINGS IN THE DATABASE."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>magJ</th>\n",
       "      <th>name</th>\n",
       "      <th>radius</th>\n",
       "      <th>spectraltype</th>\n",
       "      <th>magB</th>\n",
       "      <th>magV</th>\n",
       "      <th>temperature</th>\n",
       "      <th>magK</th>\n",
       "      <th>mass</th>\n",
       "      <th>metallicity</th>\n",
       "      <th>magH</th>\n",
       "      <th>planets</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.943</td>\n",
       "      <td>11 Com</td>\n",
       "      <td>19.000</td>\n",
       "      <td>G8 III</td>\n",
       "      <td>5.740</td>\n",
       "      <td>4.740</td>\n",
       "      <td>4742.0</td>\n",
       "      <td>2.282</td>\n",
       "      <td>2.70</td>\n",
       "      <td>-0.350</td>\n",
       "      <td>2.484</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.876</td>\n",
       "      <td>11 UMi</td>\n",
       "      <td>24.080</td>\n",
       "      <td>K4III</td>\n",
       "      <td>6.415</td>\n",
       "      <td>5.024</td>\n",
       "      <td>4340.0</td>\n",
       "      <td>1.939</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.040</td>\n",
       "      <td>2.091</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.019</td>\n",
       "      <td>14 And</td>\n",
       "      <td>11.000</td>\n",
       "      <td>K0III</td>\n",
       "      <td>6.240</td>\n",
       "      <td>5.220</td>\n",
       "      <td>4813.0</td>\n",
       "      <td>2.331</td>\n",
       "      <td>2.20</td>\n",
       "      <td>-0.240</td>\n",
       "      <td>2.608</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5.158</td>\n",
       "      <td>14 Her</td>\n",
       "      <td>0.708</td>\n",
       "      <td>K0 V</td>\n",
       "      <td>7.570</td>\n",
       "      <td>6.670</td>\n",
       "      <td>5311.0</td>\n",
       "      <td>4.714</td>\n",
       "      <td>1.00</td>\n",
       "      <td>0.430</td>\n",
       "      <td>4.803</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.090</td>\n",
       "      <td>16 Cygni A</td>\n",
       "      <td>1.243</td>\n",
       "      <td>G2V</td>\n",
       "      <td>6.590</td>\n",
       "      <td>5.950</td>\n",
       "      <td>5825.0</td>\n",
       "      <td>4.430</td>\n",
       "      <td>1.11</td>\n",
       "      <td>0.096</td>\n",
       "      <td>4.720</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    magJ        name  radius spectraltype   magB   magV  temperature   magK  \\\n",
       "0  2.943      11 Com  19.000       G8 III  5.740  4.740       4742.0  2.282   \n",
       "1  2.876      11 UMi  24.080        K4III  6.415  5.024       4340.0  1.939   \n",
       "2  3.019      14 And  11.000        K0III  6.240  5.220       4813.0  2.331   \n",
       "3  5.158      14 Her   0.708         K0 V  7.570  6.670       5311.0  4.714   \n",
       "4  5.090  16 Cygni A   1.243          G2V  6.590  5.950       5825.0  4.430   \n",
       "\n",
       "   mass  metallicity   magH  planets  \n",
       "0  2.70       -0.350  2.484      1.0  \n",
       "1  1.80        0.040  2.091      1.0  \n",
       "2  2.20       -0.240  2.608      1.0  \n",
       "3  1.00        0.430  4.803      2.0  \n",
       "4  1.11        0.096  4.720      0.0  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "stars = pd.read_csv('../../ch_10/data/stars.csv')\n",
    "stars.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train test split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "data = stars[['metallicity', 'temperature', 'magJ', 'radius', 'magB', 'magV', 'magK', 'mass', 'planets']].dropna()\n",
    "y = data.pop('temperature')\n",
    "X = data\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.25, random_state=0\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Grid search for best hyperparameters in elastic net pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture \n",
    "# don't show warning messages or output for this cell\n",
    "from sklearn.linear_model import ElasticNet\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "pipeline = Pipeline([('scale', MinMaxScaler()), ('net', ElasticNet(random_state=0))])\n",
    "\n",
    "search_space = {\n",
    "    'net__alpha' : [0.1, 0.5, 1, 1.5, 2, 5],\n",
    "    'net__l1_ratio' : np.linspace(0, 1, num=10),\n",
    "    'net__fit_intercept' : [True, False]\n",
    "}\n",
    "\n",
    "elastic_net = GridSearchCV(pipeline, search_space, cv=5).fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'net__alpha': 0.1, 'net__fit_intercept': True, 'net__l1_ratio': 1.0}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "elastic_net.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## R squared"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9087733907405916"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "elastic_net.score(X_test, y_test) # R-squared"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model equation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(2.2349719309644196, 'metallicity'),\n",
       " (-9551.259698607968, 'magJ'),\n",
       " (-5.471624568863697, 'radius'),\n",
       " (-6238.5505443056545, 'magB'),\n",
       " (-4294.056700081231, 'magV'),\n",
       " (19838.577173743968, 'magK'),\n",
       " (756.199312606241, 'mass'),\n",
       " (-254.60426328226285, 'planets')]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[(coef, feature) for coef, feature in zip(elastic_net.best_estimator_.named_steps['net'].coef_, X_train.columns)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5247.3711305376255"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "elastic_net.best_estimator_.named_steps['net'].intercept_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Residuals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<matplotlib.axes._subplots.AxesSubplot object at 0x131D25B0>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x1320D710>],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x216 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ml_utils.regression import plot_residuals\n",
    "plot_residuals(y_test, elastic_net.predict(X_test))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
